package com.itheima.ui;

import com.itheima.bean.Employee;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class AddEmployeeUI extends JFrame {

    private JTextField idField;
    private JTextField nameField;
    private JTextField ageField;
    private JComboBox<String> genderComboBox;
    private JTextField phoneField;
    private JTextField positionField;
    private JTextField salaryField;
    private JTextField departmentField;

    private JButton addButton;
    private JButton cancelButton;

    private EmployeeManageUI employeeManageUI;

    public AddEmployeeUI(EmployeeManageUI employeeManageUI) {

        this.employeeManageUI = employeeManageUI;

        setTitle("添加员工信息"); // 设置窗口标题
        setSize(500, 500); // 设置窗口大小
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); // 设置关闭窗口行为
        setLocationRelativeTo(null); // 设置窗口居中显示

        initUI(); // 初始化用户界面
        setVisible(true); // 显示窗口
    }

    private void initUI() {
        JPanel mainPanel = new JPanel(new GridBagLayout()); // 使用GridBagLayout进行布局管理
        GridBagConstraints gbc = new GridBagConstraints(); // 创建约束对象
        gbc.insets = new Insets(10, 10, 10, 10); // 设置各组件之间的边距
        //gbc.anchor = GridBagConstraints.LINE_START;

        // 设置字体大小
        Font labelFont = new Font("宋体", Font.PLAIN, 20);
        Font textFieldFont = new Font("宋体", Font.PLAIN, 20);

        // 设置ID标签和文本框
        gbc.gridx = 0; // 设置x坐标
        gbc.gridy = 0; // 设置y坐标
        JLabel idLabel = new JLabel("ID:");
        idLabel.setFont(labelFont);  //
        gbc.gridwidth = 1; // 标签占据一个格子
        mainPanel.add(idLabel, gbc); // 添加标签
        gbc.gridx = 1;
        gbc.fill = GridBagConstraints.HORIZONTAL; // 文本框占据整个格子
        gbc.weightx = 1.0; // 使文本框扩展到整个格子
        idField = new JTextField(10);
        idField.setFont(textFieldFont);
        idField.setColumns(20); // 设置文本框宽度
        mainPanel.add(idField, gbc); // 添加文本框
        //使ID标签居中
        idLabel.setHorizontalAlignment(JLabel.CENTER);

        // 设置姓名标签和文本框
        gbc.gridy = 1;
        gbc.gridx = 0;
        JLabel nameLabel = new JLabel("姓名:");
        nameLabel.setFont(labelFont);
        gbc.gridwidth = 1; // 标签占据一个格子
        mainPanel.add(nameLabel, gbc); // 添加标签
        gbc.gridx = 1;
        gbc.fill = GridBagConstraints.HORIZONTAL; // 文本框占据整个格子
        gbc.weightx = 1.0; // 使文本框扩展到整个格子
        nameField = new JTextField(10);
        nameField.setFont(textFieldFont);
        nameField.setColumns(20); // 设置文本框宽度
        mainPanel.add(nameField, gbc); // 添加文本框
        //使姓名标签居中
        nameLabel.setHorizontalAlignment(JLabel.CENTER);

        // 设置年龄标签和文本框
        gbc.gridy = 2;
        gbc.gridx = 0;
        JLabel ageLabel = new JLabel("年龄:");
        ageLabel.setFont(labelFont);
        gbc.gridwidth = 1; // 标签占据一个格子
        mainPanel.add(ageLabel, gbc); // 添加标签
        gbc.gridx = 1;
        gbc.fill = GridBagConstraints.HORIZONTAL; // 文本框占据整个格子
        gbc.weightx = 1.0; // 使文本框扩展到整个格子
        ageField = new JTextField(10);
        ageField.setFont(textFieldFont);
        ageField.setColumns(20); // 设置文本框宽度
        mainPanel.add(ageField, gbc); // 添加文本框
        //使年龄标签居中
        ageLabel.setHorizontalAlignment(JLabel.CENTER);

        // 设置性别标签和下拉框
        gbc.gridy = 3;
        gbc.gridx = 0;
        JLabel genderLabel = new JLabel("性别:");
        genderLabel.setFont(labelFont);
        gbc.gridwidth = 1; // 标签占据一个格子
        mainPanel.add(genderLabel, gbc); // 添加标签
        gbc.gridx = 1;
        gbc.fill = GridBagConstraints.HORIZONTAL; // 下拉框占据整个格子
        gbc.weightx = 1.0; // 使下拉框扩展到整个格子
        String[] genders = {"男", "女"};
        genderComboBox = new JComboBox<>(genders);
        genderComboBox.setFont(textFieldFont);
        genderComboBox.setPreferredSize(new Dimension(200, 30)); // 设置下拉框尺寸
        mainPanel.add(genderComboBox, gbc); // 添加下拉框
        //使性别标签居中
        genderLabel.setHorizontalAlignment(JLabel.CENTER);

        // 设置电话标签和文本框
        gbc.gridy = 4;
        gbc.gridx = 0;
        JLabel phoneLabel = new JLabel("电话:");
        phoneLabel.setFont(labelFont);
        gbc.gridwidth = 1; // 标签占据一个格子
        mainPanel.add(phoneLabel, gbc); // 添加标签
        gbc.gridx = 1;
        gbc.fill = GridBagConstraints.HORIZONTAL; // 文本框占据整个格子
        gbc.weightx = 1.0; // 使文本框扩展到整个格子
        phoneField = new JTextField(10);
        phoneField.setFont(textFieldFont);
        phoneField.setColumns(20); // 设置文本框宽度
        mainPanel.add(phoneField, gbc); // 添加文本框
        //使电话标签居中
        phoneLabel.setHorizontalAlignment(JLabel.CENTER);

        // 设置职位标签和文本框
        gbc.gridy = 5;
        gbc.gridx = 0;
        JLabel positionLabel = new JLabel("职位:");
        positionLabel.setFont(labelFont);
        gbc.gridwidth = 1; // 标签占据一个格子
        mainPanel.add(positionLabel, gbc); // 添加标签
        gbc.gridx = 1;
        gbc.fill = GridBagConstraints.HORIZONTAL; // 文本框占据整个格子
        gbc.weightx = 1.0; // 使文本框扩展到整个格子
        positionField = new JTextField(10);
        positionField.setFont(textFieldFont);
        positionField.setColumns(20); // 设置文本框宽度
        mainPanel.add(positionField, gbc); // 添加文本框
        //使职位标签居中
        positionLabel.setHorizontalAlignment(JLabel.CENTER);

        // 设置月薪标签和文本框
        gbc.gridy = 6;
        gbc.gridx = 0;
        JLabel salaryLabel = new JLabel("月薪:");
        salaryLabel.setFont(labelFont);
        gbc.gridwidth = 1; // 标签占据一个格子
        mainPanel.add(salaryLabel, gbc); // 添加标签
        gbc.gridx = 1;
        gbc.fill = GridBagConstraints.HORIZONTAL; // 文本框占据整个格子
        gbc.weightx = 1.0; // 使文本框扩展到整个格子
        salaryField = new JTextField(10);
        salaryField.setFont(textFieldFont);
        salaryField.setColumns(20); // 设置文本框宽度
        mainPanel.add(salaryField, gbc); // 添加文本框
        //使月薪标签居中
        salaryLabel.setHorizontalAlignment(JLabel.CENTER);

        // 设置所在部门标签和文本框
        gbc.gridy = 7;
        gbc.gridx = 0;
        JLabel departmentLabel = new JLabel("所在部门:");
        departmentLabel.setFont(labelFont);
        gbc.gridwidth = 1; // 标签占据一个格子
        mainPanel.add(departmentLabel, gbc); // 添加标签
        gbc.gridx = 1;
        gbc.fill = GridBagConstraints.HORIZONTAL; // 文本框占据整个格子
        gbc.weightx = 1.0; // 使文本框扩展到整个格子
        departmentField = new JTextField(10);
        departmentField.setFont(textFieldFont);
        departmentField.setColumns(20); // 设置文本框宽度
        mainPanel.add(departmentField, gbc); // 添加文本框
        //使所在部门标签居中
        departmentLabel.setHorizontalAlignment(JLabel.CENTER);

        // 添加按钮
        gbc.gridy = 8;
        gbc.gridx = 0;
        gbc.gridwidth = 2; // 跨两列
        gbc.anchor = GridBagConstraints.CENTER; // 按钮居中对齐
        gbc.fill = GridBagConstraints.NONE; // 按钮不占据整个格子
        gbc.weightx = 0.0; // 不扩展按钮
        addButton = new JButton("添加");
        addButton.setFont(new Font("宋体", Font.PLAIN, 18));
        addButton.setPreferredSize(new Dimension(100, 30)); // 设置按钮尺寸
        cancelButton = new JButton("取消");
        cancelButton.setFont(new Font("宋体", Font.PLAIN, 18));
        cancelButton.setPreferredSize(new Dimension(100, 30)); // 设置按钮尺寸
        JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER, 10, 5)); // 创建按钮面板
        buttonPanel.add(addButton);
        buttonPanel.add(cancelButton);
        mainPanel.add(buttonPanel, gbc); // 添加按钮面板

        // 设置按钮监听器
        addButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                addEmployee(); // 调用添加员工的方法
            }
        });

        cancelButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                dispose(); // 关闭窗口
            }
        });

        setContentPane(mainPanel); // 设置主面板为窗口的内容面板
    }

    private void addEmployee() {
        // 获取输入的信息，封装成员工对象，添加到信息界面的集合并在信息界面的表格中显示
        Employee employee = new Employee();

        employee.setId(Integer.parseInt(idField.getText()));
        employee.setName(nameField.getText());
        employee.setAge(Integer.parseInt(ageField.getText()));
        employee.setGender(genderComboBox.getSelectedItem().toString());
        employee.setPhone(phoneField.getText());
        employee.setPosition(positionField.getText());
        employee.setSalary(Double.parseDouble(salaryField.getText()));
        employee.setDepartment(departmentField.getText());

        // 验证输入是否完整

        employeeManageUI.addEmployee(employee);

        //关闭当前窗口
        dispose();


    }

    /*public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new AddEmployeeUI()); // 在事件调度线程中创建窗口实例
    }*/
}